package com.zby.admin.controller;

import com.zby.utils.Result;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
import java.io.IOException;
import java.sql.Time;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;

@RestController
@RequestMapping("/file")
@CrossOrigin
public class FileController {
    @PostMapping("/upload")
    public Result<String> upload(@RequestParam("file") MultipartFile file) {

        // 检查文件是否为空
        if (file.isEmpty()) {
            return Result.error(400, "文件不能为空");
        }

        // 获取文件原始名称
        String originalFilename = file.getOriginalFilename();
        // 获取文件后缀名
        String suffix = null;
        if (originalFilename != null) {
            int lastIndex = originalFilename.lastIndexOf(".");
            if (lastIndex != -1) {
                suffix = originalFilename.substring(lastIndex);
            }
        }

        // 检查文件格式是否为图片
        if (suffix == null || (!".jpg".equalsIgnoreCase(suffix) &&
            !".jpeg".equalsIgnoreCase(suffix) &&
            !".png".equalsIgnoreCase(suffix) &&
            !".gif".equalsIgnoreCase(suffix))) {
            return Result.error(400, "只支持jpg、jpeg、png、gif格式的图片");
        }

        // 生成唯一文件名
        String fileName = UUID.randomUUID().toString().replaceAll("-", "") + suffix;
        
        // 定义文件存储路径（实际项目中应该配置在application.yml中）
        String filePath = "Z://project/美遇校园二手交易管理系统/毕设前端/public" + "/uploads/";
        
        // 创建文件存储目录
        File directory = new File(filePath);
        if (!directory.exists()) {
            directory.mkdirs();
        }
        
        // 保存文件
        try {
            file.transferTo(new File(filePath + fileName));
        } catch (IOException e) {
            e.printStackTrace();
            return Result.error(500, "文件上传失败");
        }
        
        // 返回文件访问路径
        String fileAccessPath = "/uploads/" + fileName;
        System.out.println(fileAccessPath);
        return Result.success(fileAccessPath);
    }
    
    @PostMapping("/listUpload")
    public Result<List<String>> listUpload(@RequestParam("files") MultipartFile[] files) {
        // 检查文件数组是否为空
        if (files == null || files.length == 0) {
            return Result.error(400, "文件列表不能为空");
        }
        
        List<String> fileUrls = new ArrayList<>();
        
        // 遍历文件数组，逐个处理
        for (MultipartFile file : files) {
            // 检查文件是否为空
            if (file.isEmpty()) {
                return Result.error(400, "文件不能为空");
            }

            // 获取文件原始名称
            String originalFilename = file.getOriginalFilename();
            // 获取文件后缀名
            String suffix = null;
            if (originalFilename != null) {
                int lastIndex = originalFilename.lastIndexOf(".");
                if (lastIndex != -1) {
                    suffix = originalFilename.substring(lastIndex);
                }
            }

            // 检查文件格式是否为图片
            if (suffix == null || (!".jpg".equalsIgnoreCase(suffix) &&
                !".jpeg".equalsIgnoreCase(suffix) &&
                !".png".equalsIgnoreCase(suffix) &&
                !".gif".equalsIgnoreCase(suffix))) {
                return Result.error(400, "只支持jpg、jpeg、png、gif格式的图片");
            }

            // 生成唯一文件名
            String fileName = UUID.randomUUID().toString().replaceAll("-", "") + suffix;
            String productImage = "/productImage" + "/" + LocalDate.now();
            // 定义文件存储路径
//            String filePath = System.getProperty("user.dir") ;
            String filePath = "Z://project/美遇校园二手交易管理系统/毕设前端/public" + productImage+ "/";
            // 创建文件存储目录
            File directory = new File(filePath);
            if (!directory.exists()) {
                directory.mkdirs();
            }

            // 保存文件
            try {
                file.transferTo(new File(filePath + fileName));
            } catch (IOException e) {
                e.printStackTrace();
                return Result.error(500, "文件上传失败: " + e.getMessage());
            }

            // 添加文件访问路径到列表
            String fileAccessPath = productImage + "/" + fileName;
            fileUrls.add(fileAccessPath);
        }
        
        return Result.success(fileUrls);
    }
    
    /**
     * 删除图片文件
     * @param filePath 图片文件路径
     * @return 删除结果
     */
    @DeleteMapping("/delete")
    public Result<String> deleteFile(@RequestParam("filePath") String filePath) {
        // 检查参数是否为空
        if (filePath == null || filePath.isEmpty()) {
            return Result.error(400, "文件路径不能为空");
        }
        
        try {
            // 创建文件对象
            File file = new File(System.getProperty("user.dir") + filePath);
            
            // 检查文件是否存在
            if (!file.exists()) {
                return Result.error(404, "文件不存在");
            }
            
            // 检查是否为文件
            if (!file.isFile()) {
                return Result.error(400, "指定路径不是文件");
            }
            
            // 删除文件
            if (file.delete()) {
                return Result.success("文件删除成功");
            } else {
                return Result.error(500, "文件删除失败");
            }
        } catch (Exception e) {
            e.printStackTrace();
            return Result.error(500, "删除文件时发生异常");
        }
    }
}